C语言:feof函数的坑 | 您所在的位置:网站首页 › 错误使用feof 文件标识符无效的原因有哪些 › C语言:feof函数的坑 |
目录
引言feof()函数
引言
做课设的时候踩到这个坑,跟大家分享一下 feof()函数看一下下面的代码 #include int main() { FILE *fp = fopen("try", "w"); if (feof(fp) == 1) puts("文件已结束"); else puts("文件未结束"); return 0; }输出:文件未结束 照理说,w参数打开的文件里面应该只有EOF才对啊,为什么会返回0呢? 查阅资料后: feof函数 检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值) int feof(FILE *stream);注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。 原来出错的原因在这里,建议改成如下形式: #include int main() { FILE *fp = fopen("try", "w"); char temp[50]; if (fread(temp, sizeof(temp), 1, fp) != 1) puts("文件已结束"); else puts("文件未结束"); return 0; }输出:文件已结束 直接利用读文件函数的返回值来判断是否到达结尾。 |
CopyRight 2018-2019 实验室设备网 版权所有 |